#!/usr/bin/env node

import { execSync } from 'child_process';
import readline from 'readline';
import fs from 'fs';

// 创建 readline 接口
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

// 读取当前版本号
const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
const currentVersion = packageJson.version;

console.log(`当前版本: ${currentVersion}`);

// 询问用户输入commit信息
rl.question('请输入commit信息 (直接回车使用默认版本号信息): ', (commitMessage) => {
  try {
    // 设置默认提交信息或使用用户输入的信息
    const message = commitMessage || `build: bump version to ${currentVersion}`;
    
    // 添加所有更改到暂存区
    console.log('正在添加文件到暂存区...');
    execSync('git add .', { stdio: 'inherit' });
    
    // 检查是否有更改需要提交
    try {
      execSync('git diff --cached --quiet', { stdio: 'pipe' });
      console.log('没有检测到需要提交的更改');
    } catch (diffError) {
      // 有更改需要提交
      console.log(`正在提交更改: ${message}`);
      execSync(`git commit -m "${message}"`, { stdio: 'inherit' });
    }
    
    // 升级主版本号
    console.log('正在升级主版本...');
    try {
      execSync('npm version major', { stdio: 'inherit' });
    } catch (versionError) {
      // 如果版本标签已存在，尝试继续升级直到成功
      if (versionError.message && versionError.message.includes('tag') && versionError.message.includes('already exists')) {
        console.log('提示：版本标签已存在，尝试继续升级...');
        let retryCount = 0;
        const maxRetries = 10;
        
        while (retryCount < maxRetries) {
          try {
            retryCount++;
            console.log(`尝试第 ${retryCount} 次升级...`);
            // 使用 --force 参数强制升级版本，跳过已存在的标签
            execSync('npm version major --force', { stdio: 'inherit' });
            console.log('版本升级成功！');
            break;
          } catch (retryError) {
            if (retryError.message && retryError.message.includes('tag') && retryError.message.includes('already exists')) {
              console.log(`第 ${retryCount} 次尝试失败，版本标签仍存在...`);
              if (retryCount >= maxRetries) {
                console.log(`已达到最大重试次数 (${maxRetries})，跳过版本升级步骤`);
                // 继续执行构建
                console.log('正在执行构建...');
                execSync('npm run build', { stdio: 'inherit' });
                console.log('构建完成！');
                rl.close();
                return;
              }
              // 继续下一次循环
            } else {
              throw retryError;
            }
          }
        }
      } else {
        throw versionError;
      }
    }
    
    // 推送到远程仓库
    console.log('正在推送到远程仓库...');
    try {
      execSync('git push && git push --tags', { stdio: 'inherit' });
    } catch (pushError) {
      // 如果推送失败，尝试强制推送标签
      if (pushError.message && pushError.message.includes('already exists')) {
        console.log('标签已存在，尝试强制推送...');
        try {
          execSync('git push --force --tags', { stdio: 'inherit' });
          console.log('强制推送标签成功');
        } catch (forcePushError) {
          console.log('提示：推送失败，可能需要手动推送');
        }
      } else {
        console.log('提示：推送失败，可能需要手动推送');
      }
    }
    
    // 执行构建
    console.log('正在执行构建...');
    execSync('npm run build', { stdio: 'inherit' });
    
    console.log('构建完成！');
  } catch (error) {
    console.error('执行过程中出现错误:', error.message);
    process.exit(1);
  } finally {
    rl.close();
  }
});